OpenVSwitch

您所在的位置:网站首页 openvswitch 源码安装 OpenVSwitch

OpenVSwitch

2023-08-23 01:47| 来源: 网络整理| 查看: 265

安装启动

直接使用 docker 安装最方便!

1docker pull onosproject/onos

启动,做端口映射,不需要的可以去掉

1docker run -t -d -p 8181:8181 -p 8101:8101 -p 6653:6653 -p 6640:6640 --name onos onosproject/onos 8181 - REST API 和 GUI 8101 - ONOS CLI 9876 - 集群内通信 6653 - Openflow 通信,OVS 连接控制器使用此端口(流表相关操作) 6640 - OVSDB,OVS 网桥、端口相关的配置

启用应用,用于控制OVS时,打开下面的应用,可通过UI 界面操作,也可在容器中用命令行方式启用。

12345678docker exec -it onos bashcd bin./onos-app localhost activate org.onosproject.openflow-base./onos-app localhost activate org.onosproject.ofagent./onos-app localhost activate org.onosproject.fwd./onos-app localhost activate org.onosproject.drivers.ovsdb./onos-app localhost activate org.onosproject.proxyarp./onos-app localhost activate org.onosproject.lldpprovider

lldpprovider 是用于拓扑发现的,启用该应用后,在 UI/topology 可以看到节点是否有链路直连。

常用页面 UI 页面地址:http://localhost:8181/onos/ui/ 用户名:onos,密码:rocks RESTFUL 接口文档:http://localhost:8181/onos/v1/docs/ 流表组成说明:https://wiki.onosproject.org/display/ONOS/Flow+Rules ONOS wiki,也就是官方文档:https://wiki.onosproject.org 连接ONOS CLI 打开终端并输入以下命令,以连接到ONOS的远程命令行界面: 12phpCopy codessh @ -p 8101

其中, 是您连接到ONOS的用户名, 是ONOS的IP地址。

按回车键执行命令,并输入您的密码(如果需要)。 连接成功后,您将看到ONOS的CLI界面,类似于以下内容: 12345678910111213141516yamlCopy codeWelcome to ONOS ________ ________ ________ ________ |\ __ \|\ __ \|\ __ \|\ ___ \ \ \ \|\ \ \ \|\ \ \ \|\ \ \ \_|\ \ \ \ ____\ \ \\\ \ \ __ \ \ \ \\ \ \ \ \___|\ \ \\\ \ \ \ \ \ \ \_\\ \ \ \__\ \ \_______\ \__\ \__\ \_______\ \|__| \|_______|\|__|\|__|\|_______|Documentation: wiki.onosproject.org Tutorials: tutorials.onosproject.org Mailing lists: lists.onosproject.org Come help out! Find out how at: contribute.onosproject.orgonos>

现在,您可以在CLI中执行各种ONOS命令以管理和监控ONOS控制器和网络。

清楚所有配置 打开终端并连接到ONOS的CLI。 在CLI中输入以下命令以清除缓存: 1onos> clear storage

按回车键执行命令。

这将清除ONOS的所有缓存,包括网络拓扑、设备、主机、流表等。请注意,在执行此命令之前,您需要确保ONOS控制器已经停止对网络的控制,以避免数据丢失或网络中断。

OVS 连接控制器 要指定OPENFLOW 协议为 OPENFLOW13,OPENFLOW10,仅指定为OPENFLOW13时,连接控制器后将无法使用ofctl查看流表。 将ovs bridge 连接到控制器后的 deviceId 为bridge对应的datapath-id,可以先指定该值,再连接控制器。下发流表时会用到。 123456ovs-vsctl add-br s1 -- set bridge s1 datapath_type=netdevovs-vsctl set bridge s1 other_config:datapath-id=0x0000000000000012ifconfig s1 192.168.1.12 netmask 255.255.255.0 upovs-vsctl set bridge s1 protocols=OpenFlow13,OpenFlow10ovs-vsctl set-controller s1 tcp:172.17.0.2:6653 Example123456789101112131415161718192021222324252627282930313233343536373839404142## 创建容器sudo docker create --rm -it --name=s1 --privileged -v /dev/hugepages:/dev/hugepages -v /root/run:/root/run ovs-dpdksudo docker create --rm -it --name=s2 --privileged -v /dev/hugepages:/dev/hugepages -v /root/run:/root/run ovs-dpdksudo docker start s1sudo docker start s2## 添加 veth-peer,连接两容器sudo ip link add p1_2 type veth peer name p2_1 > /dev/nullsudo ip link set dev p1_2 name p1_2 netns $(sudo docker inspect -f '{{.State.Pid}}' s1) upsudo ip link set dev p2_1 name p2_1 netns $(sudo docker inspect -f '{{.State.Pid}}' s2) updocker exec -it s1 tc qdisc add dev p1_2 root netem delay 1docker exec -it s2 tc qdisc add dev p2_1 root netem delay 1############################### s1 中启动OVS ##################################ovs-ctl --no-ovs-vswitchd start --system-id=1001ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0x4ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem="1024"ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=trueovs-ctl --no-ovsdb-server --db-sock="$DB_SOCK" startovs-vsctl add-br s1 -- set bridge s1 datapath_type=netdevovs-vsctl set bridge s1 other_config:datapath-id=0x0000000000000012ovs-vsctl add-port s1 p1_2 -- set Interface p1_2 ofport_request=12ifconfig s1 192.168.1.12 netmask 255.255.255.0 upovs-vsctl set bridge s1 protocols=OpenFlow13,OpenFlow10ovs-vsctl set-controller s1 tcp:172.17.0.2:6653############################### s2 中启动OVS ##################################ovs-ctl --no-ovs-vswitchd start --system-id=1002ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=0x40ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem="1024"ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=trueovs-ctl --no-ovsdb-server --db-sock="$DB_SOCK" startovs-vsctl add-br s2 -- set bridge s2 datapath_type=netdevovs-vsctl set bridge s1 other_config:datapath-id=0x0000000000000021ovs-vsctl add-port s2 p2_1 -- set Interface p2_1 ofport_request=21ifconfig s2 192.168.1.21 netmask 255.255.255.0 upovs-vsctl set bridge s2 protocols=OpenFlow13,OpenFlow10ovs-vsctl set-controller s2 tcp:172.17.0.2:6653 下发流表

下发的ARP流表只能匹配MAC地址,但一般不需要手动下发。网络拓扑比较小时,也可以通过arp -s {ip} {mac}手动配置。

限制:匹配的以太类型不为IP时,无法匹配目的IP或源IP!即ARP和MPLS类型的,只能和MAC地址一起作为匹配域。实际上这才是正确的,比如MPLS类型的数据包,OVS解析时,并不会解析三层的协议。MPLS是一种隧道协议,并不关心也不会记录下一层的协议类型,因此无法解析。ovs-ofctl并不会提示这种既匹配MPLS标签又匹配IP这种“逻辑”错误。

源码编译

https://gerrit.onosproject.org/plugins/gitiles/onos

https://bazel.build/install/ubuntu

编译 ONOS 镜像

onos仓库中已有写好了的Dockerfile,将整个项目clone到本地后,即可直接编译镜像。该Dockerfile不是从网上下载源码,而是从当前目录COPY,所以修改源码后直接编译就行。

但是 ONOS 编译过程需要从github或一些外网地址下载相关编译工具,导致编译缓慢或者直接失败。需要配置代理使用:

1docker build --network=host --build-arg http_proxy=http://127.0.0.1:8889 --build-arg https_proxy=http://127.0.0.1:8889 -t onos .

上面的方式在某些情况下已经够用了,但可能卡在onos-gui-npm-install,需要进一步处理。

一种方式是修改 Dockerfile,增加 --action_env 指定代理。 12345RUN cat WORKSPACE-docker >> WORKSPACE && bazelisk build onos \+ --action_env=https_proxy=http://127.0.0.1:8889 \ --jobs ${JOBS} \ --verbose_failures \ --java_runtime_version=dockerjdk_11 另一种方式是修改web/gui/BUILD。 123456789101112131415cd onos/web/guisudo vi BUILD#修改 onos-gui-npm-install在$$NPM $$NPM_ARGS install后面加上--registry https://registry.npm.taobao.org#修改 onos-gui-npm-build在$$ROOT/$$NPM $$NPM_ARGS run build --no-cache后加上--registry https://registry.npm.taobao.orgcd onos/web/gui2-fw-libsudo vi BUILD#修改 onos-gui2-fw-npm-install在npm $$NPM_ARGS install后面加上--registry https://registry.npm.taobao.org

也可以尝试两种方法都用。此外,也可以先将bazelisk build onos之前的编译为一个镜像(免去安装编译工具的步骤),启动容器,再慢慢编译,通过docker commit将完成编译的容器保存为镜像,再参考Dockerfile进行二阶段的编译过程(此法最可靠)。

参考资料 onos 官网预编译的下载页面 onos github 「ONOS x Mininet」从0开始搭建环境 ONOS介绍 ONOS架构分析 ONOS白皮书上篇之ONOS简介 ONOS白皮书中篇之ONOS架构 ONOS编译过程的问题


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3